package com.hzy.common.utils;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import org.springframework.util.StringUtils;

import java.io.IOException;

/**
 * 自定义JSON反序列化器，用于处理带前缀的字符串并转换为Long类型.
 * 例如: "b_1" -> 1L
 */
public class PrefixStringDeserializer extends JsonDeserializer<Long> {

    @Override
    public Long deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
        String value = p.getText();
        if (!StringUtils.hasText(value)) {
            return null;
        }

        // 检查值是否包含下划线"_"，并且长度大于2
        if (value.contains("_") && value.length() > 2) {
            try {
                // 截取前缀后面的数字部分
                return Long.parseLong(value.substring(2));
            } catch (NumberFormatException e) {
                // 如果转换失败，可以根据需要抛出异常或返回null
                throw new IOException("无法将值 '" + value + "' 解析为Long类型", e);
            }
        }

        // 如果不包含前缀，尝试直接作为数字解析
        try {
            return Long.parseLong(value);
        } catch (NumberFormatException e) {
            throw new IOException("无法将值 '" + value + "' 解析为Long类型", e);
        }
    }
}